**Важно:** В системах с glibc 2.13, prelink работал не корректно, что приводило к невозможности загрузки системы. Используйте prelink и glibc 2.13 с осторожностью. Дополнительно можно почитать https://bbs.archlinux.org/viewtopic.php?pid=884465. Исправлено в glibc 2.13-4 (смотрите [https://bugs.archlinux.org/task/22656](https://bugs.archlinux.org/task/22656))

## Contents

*   [1 Введение](#.D0.92.D0.B2.D0.B5.D0.B4.D0.B5.D0.BD.D0.B8.D0.B5)
*   [2 Установка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0)
*   [3 Настройка](#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0)
*   [4 Использование](#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5)
    *   [4.1 Предварительное связывание](#.D0.9F.D1.80.D0.B5.D0.B4.D0.B2.D0.B0.D1.80.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D0.BE.D0.B5_.D1.81.D0.B2.D1.8F.D0.B7.D1.8B.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5)
    *   [4.2 Отмена предварительного связывания](#.D0.9E.D1.82.D0.BC.D0.B5.D0.BD.D0.B0_.D0.BF.D1.80.D0.B5.D0.B4.D0.B2.D0.B0.D1.80.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D0.BE.D0.B3.D0.BE_.D1.81.D0.B2.D1.8F.D0.B7.D1.8B.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F)
*   [5 Советы & Решение проблем](#.D0.A1.D0.BE.D0.B2.D0.B5.D1.82.D1.8B_.26_.D0.A0.D0.B5.D1.88.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.BE.D0.B1.D0.BB.D0.B5.D0.BC)
    *   [5.1 Ускоряем KDE](#.D0.A3.D1.81.D0.BA.D0.BE.D1.80.D1.8F.D0.B5.D0.BC_KDE)
    *   [5.2 После связывания не работает программа](#.D0.9F.D0.BE.D1.81.D0.BB.D0.B5_.D1.81.D0.B2.D1.8F.D0.B7.D1.8B.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F_.D0.BD.D0.B5_.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D0.B0.D0.B5.D1.82_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.B0)
*   [6 Полезные ссылки](#.D0.9F.D0.BE.D0.BB.D0.B5.D0.B7.D0.BD.D1.8B.D0.B5_.D1.81.D1.81.D1.8B.D0.BB.D0.BA.D0.B8)

## Введение

Большинство приложений используют разделяемые библиотеки. Библиотеки могут быть интегрированы в программу при компиляции (статическое связывание), либо подгружаться при запуске программы (динамическое связывание). Одним из преимуществ динамической компоновки, является уменьшение размера исходной программы и более простое обслуживание, но при запуске программы возникает необходимость в поиске нужных библиотек. Так как библиотеки располагаются на диске в произвольных местах,- увеличивается время запуска программ и падает производительность. prelink, выполняя предварительное связывание, позволяет уменьшить этот недостаток. При возникновении проблем динамическое связывание всегда можно отменить. Не стоит забывать, что при обновлении библиотек процесс связывания необходимо запускать заново.

## Установка

Установка Prelink при помощи pacman

```
pacman -S prelink

```

## Настройка

Все настройки программы находятся в файле `/etc/prelink.conf`

## Использование

### Предварительное связывание

Команда prelink выполнит связывание всех бинарных файлов, расположенных в директориях, которые указанны в `/etc/prelink.conf`

```
# prelink -afmR

```

<caption>Описание опций:</caption>
| Опция | Описание |
| a | All, применить предварительное связывание ко всем выполняемым файлам. |
| f | Вынуждает повторить предварительное связывание для файлов, которые уже подвергались ему. Это требуется т.к. программа prelink прекращает обработку существующих старых связанных файлов, зависимые библиотеки которых могли измениться. |
| m | Сохраняет пространство виртуальной памяти. Это требуется, если вы имеете много библиотек, которые необходимо связать. |
| R | Random, -- Выбирает случайный порядок адресов, это увеличивает безопасность против переполнений буферов. |

Для получения дополнительной информации о prelink выполните:

```
$ man prelink

```

**Важно:** Следует отметить, что при недостатке свободного места, в момент выполнения предварительного связывания для всей системы, существует вероятность усечения выполняемых файлов. Результатом может стать испорченная система. Используйте команду file или readelf для проверки целостности выполняемых файлов. Также вы можете заранее проверить наличие свободного места командой df -h

### Отмена предварительного связывания

Отменить предварительное связывание для всех бинарников:

```
# prelink -au

```

## Советы & Решение проблем

### Ускоряем KDE

Уменьшить время загрузки KDE можно выполнив предварительное связывание и отключив kdeinit (после связывания становится не нужен). Создать файл `~/.kde4/env/имя_файла.sh` (имя файла может быть любое) следующего содержания:

```
#!/bin/bash
export KDE_IS_PRELINKED=1

```

### После связывания не работает программа

Можно добавить программу в список игнорируемых, для этого следует отредактировать файл `/etc/prelink.conf`, добавив в него строку вида:

```
-b /путь_к_исполняемому файлу

```

Например:

```
-b /usr/bin/skype

```

Затем переустановить программу.

## Полезные ссылки

*   [Prelink man page](http://linux.die.net/man/8/prelink)
*   [Gentoo Linux Prelink Guide](http://www.gentoo.org/doc/en/prelink-howto.xml)
*   [ELF Prelinking and what it can do for you](http://crast.us/james/articles/prelink.php)